home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs20.d81 / frcscp64.sfx / fracscapes64 (.txt) < prev    next >
Commodore BASIC  |  1990-02-12  |  15KB  |  512 lines

  1. 10 REM         FRACSCAPES 64
  2. 20 REM              OR
  3. 30 REM    3-D FRACTAL LANDSCAPES
  4. 40 REM
  5. 50 REM   BY MICHIEL VAN DE PANNE
  6. 60 REM FROM THE JULY ISSUE OF CREATIVE
  7. 70 REM     COMPUTING (R.I.P.)
  8. 80 REM
  9. 90 REM    HACKED UNMERCIFULLY AND
  10. 100 REM   MODIFIED FOR THE AMIGA FROM
  11. 110 REM    THE MAC VERSION BY
  12. 120 REM DAVID MILLIGAN, 70707,2521
  13. 130 REM     AND TED INGALLS
  14. 140 REM         10-19-85
  15. 150 REM
  16. 160 REM  ** THIS PROGRAM WILL CONSTRUCT
  17. 170 REM  ** A REALISTIC 3-D LANDSCAPE
  18. 180 REM  ** FRACTAL FROM MANY RANDOM
  19. 190 REM  ** NUMBERS IN UP TO SEVEN
  20. 200 REM  ** LEVELS OF DETAIL,SIMULATING
  21. 210 REM  ** MOUNTAIN RANGES, COASTLINES
  22. 220 REM  ** SEA FLOOR AND/OR SURFACES,
  23. 230 REM  ** LAKES,ISLANDS,ETC.
  24. 240 REM  ** ONCE THE ARRAY USED TO DO
  25. 250 REM  ** THE DRAWING IS CREATED,IT
  26. 260 REM  ** CAN BE SAVED TO DISK AND
  27. 270 REM  ** RELOADED AND RE-DRAWN.
  28. 280 REM  **  WE SAVED THE ARRAY RATHER
  29. 290 REM  ** THAN THE SCREEN BECAUSE:
  30. 300 REM  **  (1) WE COULDN'T FIGURE OUT
  31. 310 REM  ** HOW TO FIND THE START OF
  32. 320 REM  ** SCREEN MEMORY FROM ABASIC
  33. 330 REM  ** AND COULDN'T GET A 640X200
  34. 340 REM  ** SCREEN STUFFED INTO AN
  35. 350 REM  ** ARRAY, AND
  36. 360 REM  **  (2) THE ARRAY CAN BE
  37. 370 REM  ** RE-DRAWN WITH DIFFERENT
  38. 380 REM  ** SCALING FACTORS FOR
  39. 390 REM  ** PERSPECTIVE CHANGES AND
  40. 400 REM  ** WITH SEA LEVEL ON OR OFF
  41. 410 REM  ** (DEFAULT IS OFF).
  42. 420 REM  ** THE LENGTH OF TIME REQUIRED
  43. 430 REM  ** TO DRAW AN ARRAY DEPENDS
  44. 440 REM  ** ON THE NUMBER OF LEVELS
  45. 450 REM  ** SELECTED. FOR EACH INCREASE
  46. 460 REM  ** IN LEVEL THE NUMBER OF
  47. 470 REM  ** TRIANGULAR SUBDIVISIONS IS
  48. 480 REM  ** QUADRUPLED. A LEVEL 7
  49. 490 REM  ** LANDSCAPE HAS THE HIGHEST
  50. 500 REM  ** 'RESOLUTION', BUT TAKES
  51. 510 REM  ** OVER AN HOUR TO DRAW.
  52. 520 REM
  53. 530 REM  **  ONE OF THE MAIN THINGS WE
  54. 540 REM  ** ADDED TO THE ORIGINAL
  55. 550 REM  ** PROGRAM WAS COLOR. THE 12
  56. 560 REM  ** COLORS ARE SELECTED BY WHAT
  57. 570 REM  ** WE DETERMINED WAS ALTITUDE
  58. 580 REM  ** TO RENDER FORESTS,WATER
  59. 590 REM  ** SNOW, DIRT, ETC.
  60. 600 REM  **  CONSIDERING WE UNDERSTAND
  61. 610 REM  ** VITUALLY NOTHING OF THE
  62. 620 REM  ** MATH INVOLVED, IT WORKS
  63. 630 REM  ** PRETTY WELL.
  64. 640 REM  **  IF YOU'VE GOT A BETTER
  65. 650 REM  ** IDEA, HAVE AT IT.
  66. 660 REM  **  THIS PROGRAM IS DEFINATELY
  67. 670 REM  ** NOT POLISHED,OPTIMIZED OR
  68. 680 REM  ** BUG FREE, BUT IT IS FUN TO
  69. 690 REM  ** PLAY WITH.
  70. 700 REM  **  WHILE I DON'T UNDERSTAND
  71. 710 REM  ** THEM, I FIND FRACTAL
  72. 720 REM  ** GRAPHICS GENERATION
  73. 730 REM  ** FASCINATING. IF YOU'VE GOT
  74. 740 REM  ** A NIFTY FRACTAL PROGRAM,
  75. 750 REM  ** UPLOAD IT HERE OR SING OUT
  76. 760 REM  ** VIA E-MAIL.
  77. 770 REM
  78. 780 REM     DAVID MILLIGAN, 70707,2521
  79. 790 REM  ******************************
  80. 800 REM
  81. 810 REM  ** FRACSCAPE 64 WOULD NOT BE
  82. 820 REM  AS NICE WITHOUT THE HIGH
  83. 830 REM  RESOLUTION GRAPHICS UTILITY
  84. 831 REM  ($C000-$C81F)
  85. 840 REM  BY GARY KIZIAK FROM VOLUME
  86. 850 REM  5,ISSUE 6 OF TRANSACTOR
  87. 860 REM  MAGAZINE. ****THANKS********
  88. 872 REM  THE REST OF FILE 'HIHIRES'
  89. 873 REM  IS A HIRES SCREEN DUMP
  90. 874 REM  PROGRAM ($C820-$CAA0)
  91. 875 REM
  92. 880 REM  ** THIS PROGRAM WAS CONVERTED
  93. 890 REM  FROM AMIGA ABASIC FOR THE C64
  94. 900 REM  BY DOUG COWARD (DONQUIXOTE ON
  95. 910 REM  Q-LINK)
  96. 920 REM
  97. 930 REM  THE LOSS OF COLOR THAT THE
  98. 940 REM  AMIGA IS CAPABLE OF DOES NOT
  99. 950 REM  TAKE AWAY FROM THE BEAUTY OF
  100. 960 REM  THESE FRACTALS.
  101. 970 REM   STANDARD BITMAP MODE DRAWS IN
  102. 980 REM  ONE COLOR (I PICKED DK. GRAY)
  103. 990 REM  MULTICOLOR MODE DRAWS IN THREE
  104. 1000 REM  COLORS ( DK.GRAY,BLUE,GREEN OR
  105. 1010 REM  DK.GRAY,GREEN,WHITE)
  106. 1020 REM
  107. 1030 REM PN=  **  COLORS  **
  108. 1040 REM    SEALEVEL=   0   1   0   1
  109. 1050 REM    MC=MULCOLOR 0   0   1   1
  110. 1060 REM  0 BACKGROUND  14  14  14  14
  111. 1070 REM  1 FOREGROUND  11  11  5   6
  112. 1080 REM  2 MULTICOLOR1 --  --  11  5
  113. 1090 REM  3 MULTICOLOR2 --  --  1   11
  114. 1100 REM  4 BORDER      14  14  14  14
  115. 1110 REM  --------------------------
  116. 1120 REM  1 = WHITE (SNOW)
  117. 1130 REM  6 = BLUE (WATER)
  118. 1140 REM  11= DARK GRAY (ROCK)
  119. 1150 REM  5 = GREEN (FOREST)
  120. 1160 REM  14= LIGHT BLUE (SKY)
  121. 1170 REM
  122. 1180 REM   THIS PROGRAM CAN BE IMPROVED.
  123. 1190 REM  IF YOU HAVE IMPROVEMENTS OR IF
  124. 1200 REM  UNDERSTAND THE MATH OF FRACTAL
  125. 1210 REM  SEND E-MAIL.   ** ENJOY **
  126. 1220 REM      DOUG COWARD
  127. 1230 REM =============================
  128. 1235 IF A=0 THEN A=1:LOAD "HIHIRES",8,1
  129. 1240 HI=12*4096:DR=HI+3:PL=DR+3:MO=PL+3:CL=MO+3:DM=CL+3:
  130. 1250 SC=DM+3:CO=SC+3:BO=CO+3:TE=BO+3:PR=TE+3:CH=PR+3:TR=CH+3
  131. 1260 PRINTCHR$(147):SYSTRAP:PI=3.14159:GOSUB1430:PRINT CHR$(158)
  132. 1270 PRINT"         FRACSCAPES 64"
  133. 1280 PRINT"  THIS PROGRAM WAS CONVERTED FROM AMIGA "
  134. 1290 PRINT" ABASIC FOR THE C64 BY DOUG COWARD"
  135. 1300 PRINT"                      (DONQUIXOTE)"
  136. 1310 PRINT" SELECT STANDARD HIRES":PRINT" (ONE COLOR)"
  137. 1320 PRINT" OR SELECT MULTICOLOR BITMAP MODE FOR"
  138. 1330 PRINT" THREE COLORS AT LOWER RESOLUTION"
  139. 1340 REM *** PROGRAM INITIALIZATION ***
  140. 1350 PRINT"     INITIALIZING ARRAYS"
  141. 1360 DIMD(64,33):LE=0
  142. 1370 GOSUB4870:FORI=1TO2000:NEXT:GOTO3120
  143. 1380 REM ==============================
  144. 1390 REM *** WAIT FOR ANY KEY  ***
  145. 1400 GETA$:IFA$=""THEN1400
  146. 1410 RETURN
  147. 1420 REM ==============================
  148. 1430 REM *** SET INITIAL COLORS ***
  149. 1440 POKE53280,14:POKE53281,14
  150. 1450 C1=11:C2=1:C3=6
  151. 1460 RETURN
  152. 1470 REM ==============================
  153. 1480 REM CALCULATE ARRAY DATA AND INSERT
  154. 1490 PRINT"   WORKING ON LEVEL "
  155. 1500 DT=2:FORN=1TOLE:DT=DT+2^(N-1):NEXTN
  156. 1510 MX=DT-1:MY=MX/2:RH=PI*30/180:VT=RH*1.2
  157. 1520 FORN=1TOLE:L=10000/1.8^N
  158. 1530 PRINT:PRINT"   ";N
  159. 1540 IB=MX/2^N:SK=IB*2
  160. 1550 GOSUB1610:REM ASSIGN HEIGHTS ALONG X IN ARRAY
  161. 1560 GOSUB1690:REM *** ASSIGN HEIGHTS ALONG Y ***
  162. 1570 GOSUB1770:REM *** ASSIGN HEIGHTS ALONG Z ***
  163. 1580 NEXTN
  164. 1590 PRINTCHR$(147):GOTO3030
  165. 1600 REM =============================
  166. 1610 REM   *** HEIGHTS ALONG X ***
  167. 1620 FORYE=0TOMX-1STEPSK
  168. 1630 FORXE=IB+YETOMXSTEPSK
  169. 1640 AX=XE-IB:AY=YE:GOSUB1860:D1=D:AX=XE+IB:GOSUB1860:D2=D
  170. 1650 D=(D1+D2)/2+RND(1)*L/2-L/4:AX=XE:AY=YE:GOSUB1920
  171. 1660 NEXTXE
  172. 1670 NEXTYE:RETURN
  173. 1680 REM =============================
  174. 1690 REM *** HEIGHTS ALONG Y ***
  175. 1700 FORXE=MXTO1STEP-SK
  176. 1710 FORYE=IBTOXESTEPSK
  177. 1720 AX=XE:AY=YE+IB:GOSUB1860:D1=D:AY=YE-IB:GOSUB1860:D2=D
  178. 1730 D=(D1+D2)/2+RND(1)*L/2-L/4:AX=XE:AY=YE:GOSUB1920
  179. 1740 NEXTYE
  180. 1750 NEXTXE:RETURN
  181. 1760 REM =============================
  182. 1770 REM *** HEIGHTS ALONG Z ***
  183. 1780 FORXE=0TOMX-1STEPSK
  184. 1790 FORYE=IBTOMX-XESTEPSK
  185. 1800 AX=XE+YE-IB:AY=YE-IB:GOSUB1860:D1=D
  186. 1810 AX=XE+YE+IB:AY=YE+IB:GOSUB1860:D2=D
  187. 1820 AX=XE+YE:AY=YE:D=(D1+D2)/2+RND(1)*L/2-L/4:GOSUB1920
  188. 1830 NEXTYE
  189. 1840 NEXTXE:RETURN
  190. 1850 REM =============================
  191. 1860 REM *** RETURN DATA FROM ARRAY ***
  192. 1870 IFAY>MYTHEN1890
  193. 1880 BY=AY:BX=AX:GOTO1900
  194. 1890 BY=MX+1-AY:BX=MX-AX
  195. 1900 D=D(BX,BY):RETURN
  196. 1910 REM =============================
  197. 1920 REM *** PUT DATA INTO ARRAY ***
  198. 1930 IFAY>MYTHEN1950
  199. 1940 BY=AY:BX=AX:GOTO1960
  200. 1950 BY=MX+1-AY:BX=MX-AX
  201. 1960 D(BX,BY)=D:RETURN
  202. 1970 REM =============================
  203. 1980 REM *** SEA LEVEL SECTION ***
  204. 1990 IFSEALEVEL=0THENGOSUB2190:RETURN
  205. 2000 IFXO<>-999THEN2030
  206. 2010 IFZZ<0THENGOSUB2410:Z2=ZZ:ZZ=0:GOTO2170
  207. 2020 GOSUB2450:GOTO2160
  208. 2030 IFZ2>0ANDZZ>0THENGOSUB2190:GOTO2160
  209. 2040 IFZ2<0ANDZZ<0THENZ2=ZZ:ZZ=0:GOTO2170
  210. 2050 W3=ZZ/(ZZ-Z2):X3=(X2-XX)*W3+XX:Y3=(Y2-YY)*W3+YY:Z3=0
  211. 2060 ZT=ZZ:YT=YY:XT=XX
  212. 2070 IFZZ>0THEN2130
  213. 2080 REM =============================
  214. 2090 REM *** GOING INTO WATER ***
  215. 2100 ZZ=Z3:YY=Y3:XX=X3:GOSUB2710
  216. 2110 GOSUB2410:ZZ=0:YY=YT:XX=XT:Z2=ZT:GOTO2170
  217. 2120 REM =============================
  218. 2130 REM *** COMING OUT OF WATER ***
  219. 2140 ZZ=Z3:YY=Y3:XX=X3:GOSUB2710
  220. 2150 GOSUB2450:ZZ=ZT:YY=YT:XX=XT
  221. 2160 Z2=ZZ
  222. 2170 X2=XX:Y2=YY:RETURN
  223. 2180 REM =============================
  224. 2190 REM  *** NEW COLOR SUBROUTINE ***
  225. 2200 IFZZ<0THENGOTO2330
  226. 2210 REM IF ZZ>950 THEN PENA 2:RETURN
  227. 2220 REM IF ZZ>850 THEN PENA 3:RETURN
  228. 2230 REM IF ZZ>750 THEN PENA 4:RETURN
  229. 2240 IFZZ>750THENPN=C3:GOTO2300
  230. 2250 REM IF ZZ>550 THEN PENA 6:RETURN
  231. 2260 REM IF  ZZ>450 THEN PENA 7:RETURN
  232. 2270 REM IF ZZ>350 THEN PENA 12:RETURN
  233. 2280 REM IF ZZ>100 THEN PENA 12:RETURN
  234. 2290 GOSUB2450
  235. 2300 IFMC=0THENPN=C1
  236. 2310 RETURN
  237. 2320 REM =============================
  238. 2330 REM  *** BELOW SEA LEVEL ***
  239. 2340 IFZZ>-200THENGOSUB2410:RETURN
  240. 2350 REM IF ZZ>-500 THEN PENA 9:RETURN
  241. 2360 REM IF ZZ>-800 THEN PENA 10:RETURN
  242. 2370 REM IF ZZ>-1200 THEN PENA 11:RETURN
  243. 2380 REM PENA 11
  244. 2390 RETURN
  245. 2400 REM =============================
  246. 2410 REM *** SWITCH TO SEA LEVEL COLOR ***
  247. 2420 PN=C1
  248. 2430 F1=1:RETURN
  249. 2440 REM =============================
  250. 2450 REM *** SWITCH TO LAND COLOR ***
  251. 2460 IFMC=1THENPN=C2:GOTO2480
  252. 2470 PN=C1
  253. 2480 F1=0:RETURN
  254. 2490 REM =============================
  255. 2500 REM   *** ROTATION ***
  256. 2510 IFXX<>0THEN2540
  257. 2520 IFYY<=0THENRA=-PI/2:GOTO2560
  258. 2530 RA=PI/2:GOTO2560
  259. 2540 RA=ATN(YY/XX)
  260. 2550 IFXX<0THENRA=RA+PI
  261. 2560 R1=RA+RH:RD=SQR(XX*XX+YY*YY)
  262. 2570 XX=RD*COS(R1):YY=RD*SIN(R1)
  263. 2580 RETURN
  264. 2590 REM =============================
  265. 2600 REM *** TILT DOWN ***
  266. 2610 RD=SQR(ZZ*ZZ+XX*XX)
  267. 2620 IFXX=0THENRA=PI/2:GOTO2650
  268. 2630 RA=ATN(ZZ/XX)
  269. 2640 IFXX<0THENRA=RA+PI
  270. 2650 R1=RA-VT
  271. 2660 XX=RD*COS(R1)+XX:ZZ=RD*SIN(R1)
  272. 2670 RETURN
  273. 2680 REM =============================
  274. 2690 REM *** PLOT TO (XP,YP) ***
  275. 2700 GOSUB1980
  276. 2710 XX=XX*XS:YY=YY*YS:ZZ=ZZ*ZS
  277. 2720 GOSUB2500:REM *** ROTATE ***
  278. 2730 GOSUB2600:REM *** TILT UP ***
  279. 2740 IFXO=-999THENPR$="M":GOTO2760
  280. 2750 PR$="D"
  281. 2760 XP=INT(YY)+CX:YP=INT(ZZ)
  282. 2770 REM =============================
  283. 2780 REM *** DO PLOTTING HERE ***
  284. 2790 GETA$:IFA$<>""THEN3120
  285. 2800 IFMC=1THENXP=XP/2
  286. 2810 XP=XP*.70:YP=140.47+.663*YP:IFPR$="M"THENX8=XP:Y8=YP
  287. 2820 SYSDRAW,X8,Y8TOXP,YP,PN:X8=XP:Y8=YP:XO=XP
  288. 2830 RETURN
  289. 2840 REM =============================
  290. 2850 REM *** PLOT X AXIS ***
  291. 2860 FORAX=0TOMX:XO=-999:FORAY=0TOAX
  292. 2870 GOSUB1860:ZZ=D:YY=AY/MX*10000:XX=AX/MX*10000-YY/2
  293. 2880 GOSUB2690:NEXTAY:NEXTAX
  294. 2890 RETURN
  295. 2900 REM =============================
  296. 2910 REM *** PLOT Y AXIS ***
  297. 2920 FORAY=0TOMX:XO=-999:FORAX=AYTOMX
  298. 2930 GOSUB1860:ZZ=D:YY=AY/MX*10000:XX=AX/MX*10000-YY/2
  299. 2940 GOSUB2690:NEXTAX:NEXTAY
  300. 2950 RETURN
  301. 2960 REM =============================
  302. 2970 REM *** PLOT Z AXIS ***
  303. 2980 FOREX=0TOMX:XO=-999:FOREY=0TOMX-EX
  304. 2990 AX=EX+EY:AY=EY:GOSUB1860:ZZ=D:YY=AY/MX*10000
  305. 3000 XX=AX/MX*10000-YY/2:GOSUB2690:NEXTEY:NEXTEX
  306. 3010 RETURN
  307. 3020 REM =============================
  308. 3030 REM   *** SETUP SCREEN ***
  309. 3040 IFMC=1THENSYSHIRES,1,4,C2,C1,C3:GOTO3060
  310. 3050 SYSHIRES,0,4,C1
  311. 3060 POKE53280,4:TAX=AX:TAY=AY
  312. 3070 GOSUB2970:REM ** PLOT Z AXIS **
  313. 3080 GOSUB2910:REM ** PLOT Y AXIS **
  314. 3090 GOSUB2850:REM ** PLOT X AXIS **
  315. 3100 GOSUB1390
  316. 3110 REM =============================
  317. 3120 REM *** MAIN MENU SECTION ***
  318. 3130 SYSTEXT:PRINTCHR$(147)
  319. 3140 POKE53280,14:POKE53281,14
  320. 3150 PRINT"   CURRENT SETTINGS:":PRINT
  321. 3160 IFMC=0THENPRINT" STANDARD BITMAP MODE"
  322. 3170 IFMC=1THENPRINT" MULTICOLOR BITMAP MODE"
  323. 3180 PRINT" SEALEVEL OPTION ";:IFSEALEVEL=0THENPRINT"OFF"
  324. 3190 IFSEALEVEL<>0THENPRINT"ON"
  325. 3200 PRINT" SCALE - X=";XS;" Y=";YS;" Z=";ZS
  326. 3210 PRINT"    -) MAIN MENU (-"
  327. 3220 PRINT"   1 - START NEW LANDSCAPE"
  328. 3230 PRINT"   2 - DRAW EXISTING ARRAY"
  329. 3240 PRINT"   3 - DISPLAY CURRENT HIRES SCREEN"
  330. 3250 PRINT"   4 - SAVE FRACTAL ARRAY OR SCREEN"
  331. 3260 PRINT"   5 - LOAD FRACTAL ARRAY OR SCREEN"
  332. 3270 PRINT"   6 - RESET SCALING FACTORS"
  333. 3280 PRINT"   7 - SET SEA LEVEL OPTIONS"
  334. 3290 PRINT"   8 - SWITCH BITMAP MODE"
  335. 3300 PRINT"   9 - PRINT HIRES SCREEN"
  336. 3310 PRINT"   0 - EXIT TO BASIC"
  337. 3320 PRINT:PRINT
  338. 3330 PRINT"          SELECTION (0-9) ";
  339. 3340 GETA$:IFA$<"0"ORA$>"9"THEN3340
  340. 3350 A=ASC(A$)-48:PRINTCHR$(147)
  341. 3360 ONAGOTO3410,4580,4290,3570,3890,4680,4340,4430,3490
  342. 3370 REM =============================
  343. 3380 REM *** PROGRAM EXIT ***
  344. 3390 PRINTCHR$(147):END
  345. 3400 REM =============================
  346. 3410 PRINT" ** START A NEW FRACTAL LANDSCAPE **"
  347. 3420 PRINT"  ENTER NUMBER OF LEVELS (1-6)";:INPUTLE
  348. 3430 PRINTCHR$(147):IFLE<1ORLE>6THEN3420
  349. 3440 PRINT"    PRESS ANY KEY TO START."
  350. 3450 PRINT"  PRESS WHILE DRAWING TO ABORT."
  351. 3460 GOSUB1390:PRINTCHR$(147)
  352. 3470 GOTO1480
  353. 3480 REM =============================
  354. 3490 PRINT "PRINT HIRES SCREEN TO COMMODORE PRINTER"
  355. 3500 PRINT "AS DEVICE 4":PRINT
  356. 3505 PRINT" PRESS 1  FOR 1/4 PAGE SIZE"
  357. 3507 PRINT"       2  FOR FULL PAGE SIZE"
  358. 3508 GETA$:IF A$<"1"ORA$>"2"THEN3508
  359. 3509 POKE2,2:IF A$="1" THEN POKE2,1
  360. 3510 IF MC=0 THEN SYSHIRES,0:GOTO 3530
  361. 3520 SYSHIRES,1
  362. 3530 SYS51232
  363. 3550 GOTO 3120
  364. 3560 REM =============================
  365. 3570 PRINT"     *** ARRAY OR SCREEN SAVE ***"
  366. 3580 NAME$="":SL=0:SH=0:EL=0:EH=0
  367. 3590 PRINT" TO SAVE THE SCREEN, THE COLOR SCREEN"
  368. 3600 PRINT" IS MOVED TO $5C00 AND THE BITMAP IS"
  369. 3610 PRINT" MOVED TO $6000 AND SAVED. THIS TRASHES"
  370. 3620 PRINT" THE ARRAY SO IF YOU WANT BOTH THEN"
  371. 3630 PRINT" SAVE THE ARRAY FIRST."
  372. 3640 PRINT"     PRESS A TO SAVE ARRAY"
  373. 3650 PRINT"           S TO SAVE HIRES SCREEN"
  374. 3660 PRINT"           X TO EXIT"
  375. 3670 PRINT"             SELECTION ";:INPUTA$
  376. 3680 IFA$="A"THENA$="ARRAY":GOSUB3720:NAME$=NAME$+".ARY":GOTO3810
  377. 3690 IFA$="S"THENA$="SCREEN":GOSUB3720:NAME$=NAME$+".SCN":GOTO3740
  378. 3700 IFA$<>"X"THEN3670
  379. 3710 PRINTCHR$(147):GOTO3120:REM EXIT
  380. 3720 PRINT"  EXTENSION '.ARY' OR '.SCN' IS ADDED TO  YOUR FILENAME"
  381. 3730 PRINT"     SAVE ";A$;" AS -> ";:INPUTNAME$:RETURN
  382. 3740 DATA 120,169,48,133,1,160,0,162,4,32,237,203,169,224,141,239,203,162
  383. 3750 DATA 32,32,237,203,169,55,133,1,88,96,185,0,204,153,0,92,200,208,247,238
  384. 3760 DATA 239,203,238,242,203,202,208,238,96
  385. 3770 FOR I=52177 TO 52223:READ A:POKE I,A:NEXT I
  386. 3780 SYS 52177:REM MOVE SCREEN DOWN TO $5C00
  387. 3790 SL=0:SH=92:EL=0:EH=128
  388. 3800 GOTO3850
  389. 3810 D(0,33)=LE:D(1,33)=MX:D(2,33)=MY:D(3,33)=TAX:D(4,33)=TAY
  390. 3820 D(5,33)=XS:D(6,33)=YS:D(7,33)=ZS:D(8,33)=SEALEVEL:D(9,33)=MC
  391. 3830 SL=PEEK(47):SH=PEEK(48):EL=PEEK(49):EH=PEEK(50)
  392. 3840 REM BSAVE NAME$,A%,L%
  393. 3850 SYS57812(NAME$),8:POKE193,SL:POKE194,SH:POKE174,EL:POKE175,EH:SYS62954
  394. 3860 PRINTCHR$(147)
  395. 3870 GOTO4240
  396. 3880 REM =============================
  397. 3890 PRINT"     *** ARRAY OR SCREEN LOAD ***"
  398. 3900 NAME$=""
  399. 3910 PRINT" THE SCREEN IS LOADED AT $5C00 "
  400. 3915 PRINT"THE COLOR SCREEN IS MOVED UP TO $CC00"
  401. 3930 PRINT"AND THE BITMAP IS MOVED TO $E000"
  402. 3940 PRINT"  THIS TRASHES THE ARRAY SO IF YOU "
  403. 3950 PRINT"WANT TO LOAD BOTH THEN LOAD THE"
  404. 3960 PRINT"HIRES SCREEN FIRST."
  405. 3970 PRINT"     PRESS A TO LOAD ARRAY"
  406. 3980 PRINT"           S TO LOAD HIRES SCREEN"
  407. 3990 PRINT"           X TO EXIT"
  408. 4000 PRINT"             SELECTION ";:INPUTA$
  409. 4010 IFA$="A"THENA$="ARRAY":GOSUB4050:NAME$=NAME$+".ARY":GOTO4090
  410. 4020 IFA$="S"THENA$="SCREEN":GOSUB4050:NAME$=NAME$+".SCN":GOTO4080
  411. 4030 IFA$<>"X"THEN4000
  412. 4040 PRINTCHR$(147):GOTO3120:REM EXIT
  413. 4050 PRINT"ENTER THE FILENAME WITHOUT THE EXTENSION '.ARY' OR '.SCN'"
  414. 4060 PRINT"  NAME OF ";A$;" TO LOAD -> ";:INPUTNAME$:RETURN
  415. 4070 RETURN
  416. 4080 REM LOAD SCREEN
  417. 4082 SYS57812(NAME$),8:POKE195,0:POKE196,92:POKE780,0:SYS62626
  418. 4084 FOR I=0TO1023:POKE52224+I,PEEK(23552+I:NEXT
  419. 4086 FOR I=0TO8191:POKE57344+I,PEEK(24576+I:NEXT:GOTO 4240
  420. 4090 REM LOAD ARRAY
  421. 4100 SYS57812(NAME$),8:POKE195,PEEK(47):POKE196,PEEK(48):POKE780,0:SYS62626
  422. 4110 LE=D(0,33):MX=D(1,33):MY=D(2,33):AX=D(3,33):AY=D(4,33)
  423. 4120 XS=D(5,33):YS=D(6,33):ZS=D(7,33):SEALEVEL=D(8,33):MC=D(9,33)
  424. 4130 PRINTCHR$(147)
  425. 4140 PRINT"ARRAY NAME -> ";NAME$
  426. 4150 PRINT"NUMBER OF LEVELS -> ";LE
  427. 4160 IFSEALEVEL=0THENLEVEL$="OFF":GOTO4180
  428. 4170 LEVEL$="ON"
  429. 4180 PRINT"SEA LEVEL DISPLAY -> ";LEVEL$
  430. 4190 IFMC=0THENPRINT"BITMAP MODE  -> STANDARD"
  431. 4200 IFMC=1THENPRINT"BITMAP MODE  -> MULTICOLOR"
  432. 4210 PRINT"SCALING VALUES ->  X=";XS
  433. 4220 PRINT"                   Y=";YS
  434. 4230 PRINT"                   Z=";ZS
  435. 4240 PRINT" PRESS ANY KEY TO CONTINUE"
  436. 4250 GOSUB1390
  437. 4260 PRINTCHR$(147)
  438. 4270 GOTO3120
  439. 4280 REM =============================
  440. 4290 REM ** REDISPLAY BITMAP SCREEN **
  441. 4300 IFMC=1THENSYSHIRES,1:GOTO4320
  442. 4310 SYSHIRES,0
  443. 4320 POKE53280,4:GOSUB1390:GOTO3120
  444. 4330 REM =============================
  445. 4340 PRINT"     *** SET SEA LEVEL OPTION ***"
  446. 4350 PRINT"  DISPLAY SEA LEVEL SURFACE (Y/N) ";:INPUTA$
  447. 4360 IFA$="Y"THEN GOTO4390
  448. 4370 SEALEVEL=0:IF MC=0 THEN C1=11:GOTO4410
  449. 4380 C1=5:C2=11:C3=1:GOTO4410
  450. 4390 SEALEVEL=1:IF MC=0 THEN C1=11:GOTO4410
  451. 4400 C1=6:C2=5:C3=11
  452. 4410 PRINTCHR$(147):GOTO 3120
  453. 4420 REM =============================
  454. 4430 PRINT"     *** SET BITMAP MODE ***"
  455. 4440 PRINT"  (S)TANDARD BITMAP"
  456. 4450 PRINT"  (M)ULTICOLOR BITMAP"
  457. 4460 PRINT"  SELECT BITMAP MODE (S/M):";:INPUTA$
  458. 4470 IF A$="M" THEN 4490
  459. 4480 MC=0:C1=11:GOTO4510
  460. 4490 MC=1:IF SEALEVEL=0 THEN C1=5:C2=11:C3=1:GOTO 4510
  461. 4500 C1=6:C2=5:C3=11
  462. 4510 PRINTCHR$(147):GOTO 3120
  463. 4520 REM =============================
  464. 4530 REM  ***  ERROR TRAP ***
  465. 4540 REM ONERRORGOTO4540
  466. 4550 A=0
  467. 4560 GOTO3120
  468. 4570 REM =============================
  469. 4580 PRINT"     *** REDRAW OLD ARRAY ***"
  470. 4590 IFLE=0THEN3120
  471. 4600 RH=PI*30/180:VT=RH*1.2
  472. 4610 PRINT" CLEAR SCREEN BEFORE RE-DRAW (Y/N):";:INPUTA$
  473. 4620 PRINTCHR$(147)
  474. 4630 IFA$="Y"THEN GOTO 3030
  475. 4640 POKE53280,4:IFMC=1THENSYSHIRES,1:GOTO4660
  476. 4650 SYSHIRES,0
  477. 4660 GOTO 3060
  478. 4670 REM =============================
  479. 4680 REM *** SCALING SETTINGS ***
  480. 4690 SYSTEXT:PRINTCHR$(147)
  481. 4700 PRINT"    CURRENT SCALING SETTINGS :"
  482. 4710 PRINT:PRINT"             X=";XS
  483. 4720 PRINT"             Y=";YS
  484. 4730 PRINT"             Z=";ZS
  485. 4740 PRINT"     PRESS C TO CHANGE SETTINGS"
  486. 4750 PRINT"           D FOR DEFAULT SETTINGS"
  487. 4760 PRINT"           X TO EXIT"
  488. 4770 REM GOSUB4500
  489. 4780 PRINT"             SELECTION ";:INPUTA$
  490. 4790 IFA$="C"THEN4840
  491. 4800 IFA$="D"THENGOSUB4870:GOTO4830
  492. 4810 IFA$<>"X"THEN4830
  493. 4820 PRINTCHR$(147):GOTO3120
  494. 4830 PRINTCHR$(147):GOTO4700
  495. 4840 PRINT"    INPUT NEW X,Y,Z ";:INPUTXS,YS,ZS
  496. 4850 GOTO4830
  497. 4860 REM =============================
  498. 4870 REM *** STOCK SCALING FACTORS ***
  499. 4880 XS=.04:YS=.04:ZS=.05:RETURN
  500. 4890 REM =============================
  501. 4900 REM **** ERROR TRAP ****
  502. 4910 FMEM%=FRE(1)
  503. 4920 REM "RATS - AN ERROR OCCURRED"
  504. 4930 SYSTEXT:PRINTCHR$(147)
  505. 4950 PRINT"THERE ARE ";FMEM%;" BYTES OF MEMORY "
  506. 4955 PRINT"    PRESS 'E' TO EXIT TO BASIC"
  507. 4960 PRINT"    PRESS ANY KEY TO CONTINUE...."
  508. 4970 GOSUB1390
  509. 4980 PRINTCHR$(147)
  510. 4985 IF A$="E" THEN END
  511. 4990 GOTO3120
  512.